package com.wuban.javaproject.address;

import java.security.*;
import java.security.interfaces.ECPublicKey;
import java.security.spec.ECGenParameterSpec;
import java.security.spec.ECPoint;

/**
 * @author:wulixin
 * @email:2765774288@qq.com
 * @desc:该类用于推导生成原始格式的比特币地址
 * @datetime:2021/12/20 14:28
 */
public class address {
    /**
     * 该方法用于生成一堆随机密钥
     *
     * @return
     */
    public KeyPair generateKeys() {
        //
        try {
            KeyPairGenerator generator = KeyPairGenerator.getInstance("EC");
            //secp256k1,secp256r1
            ECGenParameterSpec spec = new ECGenParameterSpec("secp256k1");
            generator.initialize(spec);
            return generator.generateKeyPair();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (InvalidAlgorithmParameterException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 该方法用于根据给定的密钥数据，推导生成对应的原始格式的比特币地址
     *
     * @param KeyPair 生成的密钥对
     * @return 推导生成的比特币地址
     */

    public String newAdderss(KeyPair KeyPair) {
        ECPublicKey publicKey = (ECPublicKey) KeyPair.getPublic();
        ECPoint point = publicKey.getW();
        //公钥数据进行计算
        //原始格式公钥;04 + x坐标(32字节） + y坐标（32字节）   压缩格式公钥
        byte[] xBytes = point.getAffineX().toByteArray();
        byte[] yBytes = point.getAffineX().toByteArray();

        return null;
    }
}
